package com.lecture.java8.multithreading;

/**
 * @author luyn
 * @version 1.0
 * @description 死锁线程
 * 1：不同的线程分别占用对方需要的同步资源不放弃，都等待对方放弃自己需要的同步资源，就形成了线程的死锁。
 * 2：出现死锁后不会抛异常、不会出现提示、只是所有线程都处于阻塞状态，无法继续
 * 3：使用同步时要避免出现死锁
 * @date 2021/1/14 19:48
 */
public class ThreadTest4 {

    public static void main(String[] args) {

        StringBuffer s1 = new StringBuffer();
        StringBuffer s2 = new StringBuffer();



        new Thread(() -> {
            synchronized (s1) {
                s1.append("a");
                s2.append("1");
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (s2) {
                s1.append("b");
                s2.append("2");
                System.out.println(s1);
                System.out.println(s2);
            }
        }).start();

        new Thread(() -> {
            synchronized (s2) {
                s1.append("c");
                s2.append("3");
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (s1) {
                s1.append("c");
                s2.append("4");
                System.out.println(s1);
                System.out.println(s2);
            }
        }).start();
    }
}
